<?php
class FuncionarioDAO{
	private static $instaciaUnica;
	private $conexao;

	private function __construct(){
		$this->conexao = Conexao::getConexao();
	}

	public static function getInstancia(){
		if(!isset(self::$instaciaUnica)){
			self::$instaciaUnica = new FuncionarioDAO();
		}
		return self::$instaciaUnica;
	}

	public function listaFuncionario(){
		$lista	=	Array();
		$rs		=	new QueryMySql();
		$daoPessoa  = PessoaDAO::getInstancia();
		//$listaPessoa = $daoPessoa->listaPessoa();
		
		//$rs->setQuery("Select * From tbl_funcionario");
		$rs->setQuery("SELECT  
		`tbl_funcionario`.`cargo`,
		`tbl_pessoa`.`codPessoa`,
		`tbl_pessoa`.`nomePessoa`,
        `tbl_setor`.`codSetor`,
        `tbl_setor`.`descricao`,
        `tbl_instituicao`.`codInstituicao`,
        `tbl_instituicao`.`nomeInstituicao`
        
		from 	`tbl_funcionario`, `tbl_pessoa`, `tbl_setor`, `tbl_instituicao`
		where	`tbl_funcionario`.`codPessoa`=`tbl_pessoa`.`codPessoa` AND
				`tbl_funcionario`.`codSetor`= `tbl_setor`.`codSetor` AND
    			`tbl_funcionario`.`codInstituicao`=`tbl_instituicao`.`codInstituicao`");
		while ($rs->getrow()){
			$funcionario = new Funcionario();
			$setor = new Setor();
			$instituicao = new Instituicao();
			
			$funcionario->setCargo($rs->field("cargo"));
			$funcionario->setNomePessoa($rs->field("nomePessoa"));
			$funcionario->setCodPessoa($rs->field("codPessoa"));
			
			$setor->setCodSetor($rs->field("codSetor"));
			$setor->setDescricao($rs->field("descricao"));
			$funcionario->setSetor($setor);
			
			$instituicao->setCodInstituicao($rs->field("codInstituicao"));
			$instituicao->setNomeInstituicao($rs->field("nomeInstituicao"));
			$funcionario->setInstituicao($instituicao);
				
			$lista[] = $funcionario;
		}
		return $lista;
		
	}

	public function insertFuncionario(Funcionario $funcionario, Pessoa $pessoa){
		$daoPessoa  = PessoaDAO::getInstancia();
		$id = $daoPessoa->insertPessoa($pessoa);
		
		$setor = new Setor();
		$instituicao = new Instituicao();
		
		$setor = $funcionario->getSetor();
		$instituicao = $funcionario->getInstituicao();
		
		$sql 		= new UpdateSQL();
		$sql->setTable("tbl_funcionario");
		$sql->addField("codSetor", 	$setor->getCodSetor(), "Number");
		$sql->addField("codInstituicao", $instituicao->getCodInstituicao(), "Number");
		$sql->addField("cargo", 	$funcionario->getCargo(),"String");
		$sql->addField("codPessoa", $id,"Number");
		$sql->setAction("INSERT");
		
		//return $id;
		return $this->conexao->execute($sql->getSQL());
	}

	public function updateFuncionario(Funcionario $funcionario, Pessoa $pessoa){
		$daoPessoa = PessoaDAO::getInstancia();
		$daoPessoa->updatePessoa($pessoa);
		
		$setor = new Setor();
		$instituicao = new Instituicao();
		
		$setor = $funcionario->getSetor();
		$instituicao = $funcionario->getInstituicao();
		
		$sql 		= new UpdateSQL();
		$sql->setTable("tbl_funcionario");
		$sql->setKey("codPessoa", $pessoa->getCodPessoa(), "Number");
		$sql->addField("codSetor", $setor->getCodSetor(), "Number");
		$sql->addField("codInstituicao", $instituicao->getCodInstituicao(), "Number");
		$sql->addField("cargo", $funcionario->getCargo(), "String");
		$sql->setAction("UPDATE");
		//return $var;
		return $this->conexao->execute($sql->getSQL());
	}

	public function deleteFuncionario(Pessoa $pessoa){
		$daoPessoa = PessoaDAO::getInstancia();
		$func = $daoPessoa->deletePessoa($pessoa);
		
		return $func;
	}
}
?>